1、题干
给你一个下标从 0 开始的整数数组 nums 和一个整数 value 。
在一步操作中,你可以对 nums 中的任一元素加上或减去 value 。
- 例如,如果 
nums = [1,2,3]且value = 2,你可以选择nums[0]减去value,得到nums = [-1,2,3]。 
数组的 MEX (minimum excluded) 是指其中数组中缺失的最小非负整数。
- 例如,
[-1,2,3]的 MEX 是0,而[1,0,3]的 MEX 是2。 
返回在执行上述操作 任意次 后,nums 的最大 MEX 。
示例 1:
输入:nums = [1,-10,7,13,6,8], value = 5
输出:4
解释:执行下述操作可以得到这一结果:
- nums[1] 加上 value 两次,nums = [1,0,7,13,6,8]
- nums[2] 减去 value 一次,nums = [1,0,2,13,6,8]
- nums[3] 减去 value 两次,nums = [1,0,2,3,6,8]
nums 的 MEX 是 4 。可以证明 4 是可以取到的最大 MEX 。
示例 2:
输入:nums = [1,-10,7,13,6,8], value = 7
输出:2
解释:执行下述操作可以得到这一结果:
- nums[2] 减去 value 一次,nums = [1,-10,0,13,6,8]
nums 的 MEX 是 2 。可以证明 2 是可以取到的最大 MEX 。
提示:
1 <= nums.length, value <= 105-109 <= nums[i] <= 109
2、思路
- 对 
nums所有元素与value取模计数,得到数组ms - 遍历区间 
[0,nums.length),消费ms,直到遍历结束 或ms中某个余数被消耗完(ms[i % value] < 1) ,此时的下标i即所求结果 
3、代码
function findSmallestInteger(nums: number[], value: number): number {
    const ms = new Array(value).fill(0);
    for (const n of nums) {
        const mod = n % value + (n % value < 0 ? value : 0);
        ms[mod]++;
    }
    let ans = 0;
    for (let i = 0; i < nums.length; i++, ans++) {
        const mod = i % value;
        if (ms[mod] < 1) break;
        ms[mod]--;
    }
    return ans;
};
4、复杂度
- 时间复杂度:
 - 空间复杂度:
 
5、执行结果
